package tela;

import ferramentas.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pessoal.CoordenadorDeCurso;
import pessoal.Curso;
import pessoal.Documento;
import pessoal.Inscricao;
import pessoal.Usuario;

/**
 *
 * @author ciar
 */
public class naoHomologarAluno extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();

        try {
            CoordenadorDeCurso u = (CoordenadorDeCurso) request.getSession().getAttribute("usuario");
            int cursoNumero = Integer.parseInt(request.getParameter("curso"));
            int inscricao = Integer.parseInt(request.getParameter("numero"));
            Query q = new Query();
            Inscricao inscrito = q.getInscricao(String.valueOf(inscricao));
            inscrito.setHomologado(2);
            Usuario usuario = q.getUsuario(inscrito.getCpf());
            Curso curso = q.getCurso(cursoNumero);

            //Rotina que adia a data de homologação para um dia a mais, já que o limite é 23:59
            Calendar dataHomFinal = curso.getDataCalendar(curso.getHomologacaoFinal().toString());
            dataHomFinal.set(Calendar.DAY_OF_MONTH, (dataHomFinal.get(Calendar.DAY_OF_MONTH) + 1));

            if ((new Date(System.currentTimeMillis())).compareTo(dataHomFinal.getTime()) < 0) {
                //Possíveis documentos incorretos
                String cpf = "Documento de Identidade e CPF";
//                String endereco = "Comprovante de EndereÃ§o";
//                String diploma = "Diploma ou DeclaraÃ§Ã£o de ConclusÃ£o de Curso de GraduaÃ§Ã£o";
//                String experiencia = "Comprovante de ExperiÃªncia no MagistÃ©rio; ou VÃ­nculo ou ConclusÃ£o de PÃ³s-graduaÃ§Ã£o";
//                String maiorTitulacao = "Documento de Maior TitulaÃ§Ã£o";

                //    String endereco = "Comprovante de Endereço";
                String diploma = "Diploma ou Declaração de Conclusão de Curso de Graduação";
                String experiencia = "Documento Comprobatório de Experiência Mínima de um Ano no Magistério do Ensino Básico ou Superior";
                String maiorTitulacao = "Documento de Maior Titulação";

                //Elementos responsáveis pelo envio do e-mail
                Comunicacao c = new Comunicacao();
                String assunto = "Alteração na Situação da Inscrição CIAR - UFG";
                StringBuilder mensagem = new StringBuilder("Olá, a situação da sua inscrição " + inscricao + " no  Processo Seletivo " + curso.getNome() + ", oferecido pela Universidade Federal de Goiás, "
                        + "foi alterada para \"Inscrição Não Homologada\". O motivo está relacionado aos documentos anexados. Seguem os detalhes. <br /><br />");

                String[] opcoesSelecionadas = request.getParameterValues("check_documentos_incorretos");
                String motivo, motivoCaracteresCorrigido;
                Integer idDocumento;
                Documento doc;
                for (int i = 0; i < opcoesSelecionadas.length; i++) {
                    idDocumento = Integer.parseInt(opcoesSelecionadas[i]);
                    doc = q.getDocumento(idDocumento);
                    doc.setStatus(1);
                    q.atualizarStatusDocumento(doc);
                    if (doc.getLegenda().equals(cpf)) {
                        motivo = request.getParameter("validade_documento_cpf");
                        motivoCaracteresCorrigido = verificaMotivo(motivo);
                        mensagem.append("- " + cpf + ": " + motivoCaracteresCorrigido + "<br />");
                    } /*else if (doc.getLegenda().equals(endereco)) {
                     motivo = request.getParameter("validade_documento_end");
                     motivoCaracteresCorrigido = verificaMotivo(motivo);
                     mensagem.append("- " + endereco + ": " + motivoCaracteresCorrigido + "<br />");
                     } */ else if (doc.getLegenda().equals(diploma)) {
                        motivo = request.getParameter("validade_documento_dip");
                        motivoCaracteresCorrigido = verificaMotivo(motivo);
                        mensagem.append("- " + diploma + ": " + motivoCaracteresCorrigido + "<br />");
                    } else if (doc.getLegenda().equals(experiencia)) {
                        motivo = request.getParameter("validade_documento_exp");
                        motivoCaracteresCorrigido = verificaMotivo(motivo);
                        mensagem.append("- " + experiencia + ": " + motivoCaracteresCorrigido + "<br />");
                    } else if (doc.getLegenda().equals(maiorTitulacao)) {
                        motivo = request.getParameter("validade_documento_tit");
                        motivoCaracteresCorrigido = verificaMotivo(motivo);
                        mensagem.append("- " + maiorTitulacao + ": " + motivoCaracteresCorrigido + "<br />");
                    }
                }
//                for (int i = 0; i < opcoesSelecionadas.length; i++) {
//                    if (opcoesSelecionadas[i].equals(cpf)) {
//                        motivo = request.getParameter("validade_documento_cpf");
//                        motivoCaracteresCorrigido = verificaMotivo(motivo);
//                        mensagem.append("- " + cpf + ": " + motivoCaracteresCorrigido + "<br />");
//                    } else if (opcoesSelecionadas[i].equals(endereco)) {
//                        motivo = request.getParameter("validade_documento_end");
//                        motivoCaracteresCorrigido = verificaMotivo(motivo);
//                        mensagem.append("- Comprovante de Endereço: " + motivoCaracteresCorrigido + "<br />");
//                        mensagem.append(System.lineSeparator());
//                    } else if (opcoesSelecionadas[i].equals(diploma)) {
//                        motivo = request.getParameter("validade_documento_dip");
//                        motivoCaracteresCorrigido = verificaMotivo(motivo);
//                        mensagem.append("- Diploma ou Declaração de Conclusão de Curso de Graduação" + ": " + motivoCaracteresCorrigido + "<br />");
//                        mensagem.append(System.lineSeparator());
//                    } else if (opcoesSelecionadas[i].equals(experiencia)) {
//                        motivo = request.getParameter("validade_documento_exp");
//                        motivoCaracteresCorrigido = verificaMotivo(motivo);
//                        mensagem.append("- Comprovante de Experiência no Magistério; ou Vínculo ou Conclusão de Pós-graduação" + ": " + motivoCaracteresCorrigido + "<br />");
//                        mensagem.append(System.lineSeparator());
//                    } else if (opcoesSelecionadas[i].equals(maiorTitulacao)) {
//                        motivo = request.getParameter("validade_documento_tit");
//                        motivoCaracteresCorrigido = verificaMotivo(motivo);
//                        mensagem.append("- Documento de Maior Titulação" + ": " + motivoCaracteresCorrigido + "<br />");
//                    }
//                }
                URL urlEadmin = new URL("http://eadmin.ciar.ufg.br");
                mensagem.append("<br / >Durante o período de " + curso.getInicioRecursoFormated() + " a " + curso.getFimRecursoFormated() + ", caso seja de seu interesse, "
                        + "o sistema permitirá a interposição de recurso contra o indeferimento da inscrição, entrando em sua conta na página " + urlEadmin + ", acessando a \"Situação "
                        + "da Inscrição\" e clicando em \"Interpor Recurso\".");
                mensagem.append(" Essa mensagem foi gerada automaticamente, favor não responder.<br />");
                mensagem.append("<br />Atenciosamente, <br />");
                mensagem.append("CIAR/UFG");
                q.naoHomologarInscricao(inscricao);
                c.enviarEmail(new String[]{usuario.getEmail()}, assunto, mensagem.toString(), "noreply@ciar.ufg.br");

                out.println("<script>window.alert('Um e-mail foi enviado ao candidato informando o motivo da não homologação!');location.href='index.jsp?conteudo=lista_inscritos&curso=" + cursoNumero + "';</script>");
            } else {
                out.println("<script>window.alert('Homologação não realizada! O prazo para Homologação Final já foi expirado.');history.go(-1);</script>");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            out.println("Erro na aprovação da Homologação. Tente novamente ou entre em contato com o Administrador.");
        } finally {
            out.close();
        }

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Não Homologar Inscrição</title>");
        out.println("</head>");
        out.println("<body>");

        out.println("</body>");
        out.println("</html>");
    }

    private String verificaMotivo(String motivo) {
        if (motivo.contains("vel")) {
            return "o documento está ilegível. ";
        } else if (motivo.contains("condiz com o que foi solicitado")) {
            return "o documento é inválido (não condiz com o que foi solicitado). ";
        } else if (motivo.contains("incompleto")) {
            return "o documento está incompleto. ";
        } else if (motivo.contains("desatualizado")) {
            return "o documento está desatualizado. ";
        } else {
            return motivo;
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
